<% ASP на блюдечке %>

Часть 11. Методы сжатия мультимедиа-данных в WWW и Online Streaming своими руками

Рубен Садоян (mailto: rouben@iname.com)

Введение

Классификация типов сжатия данных

Сжатие мультимедиа-данных для их представления в Web

MPEG-4. Что это такое?

Принцип работы алгоритма сжатия MPEG-4

Основы сжатия видеоданных MPEG-4

   Основы MPEG-кодирования видео

   Основы фрактального кодирования изображений

   Индивидуальные объекты

Что такое DivX?

О MPEG Layer 3, и не только

Постановка задачи

Что же нам понадобится?

Представление данных

Просмотр содержания аудиофрагментов (файл PlayList.asp)

Проигрывание видео- и аудиоданных в режиме потока (файл Player.asp)

Заключение

Введение

Рассмотренные нами в предыдущих статьях настоящего цикла примеры в основном рассматривали проблемы коммуникационного характера. Однако уже становится ясным, что CD-ROM постепенно уступают свое место Streaming-технологиям. Это особенно касается мультимедийных ресурсов. Если раньше звуковые дорожки и видеосюжеты были слишком «тяжелы» для  Web, то современные скорости передачи данных по Всемирной компьютерной сети в совокупности с новыми технологиями сжатия мультимедиа-данных, а также постоянно нарастающий темп перехода в on-line диктуют совсем другие условия. Теперь ни для кого не секрет, что большинство мультимедиа-ресурсов доступно также и в режиме on-line. Причем если раньше это делалось в основном для скачивания с последующим просмотром (прослушиванием), то теперь это стало доступно также и в режиме потокового воспроизведения. В настоящей статье мы ознакомимся с современными методами компрессии видео и аудио для передачи последних по сетям Интернет в режиме потокового воспроизведения и попробуем самостоятельно разработать систему потокового воспроизведения аудиоданных.

Кроме того, нами будут подробно рассмотрены основные принципы, положенные в основу алгоритмов сжатия мультимедиа-данных, позволяющих сжимать последние до размеров, реальных для передачи по Интернету.

В начало В начало

Классификация типов сжатия данных

Для начала давайте определим степени сжатия данных, с тем чтобы в дальнейшем выбрать наиболее приемлемые для передачи информации через Web. Проведем классификацию типов сжатия по степеням потери качества.

1. Сжатие без потерь данных

Полученное после декомпрессии изображение будет в точности (побитно) совпадать с оригиналом. Примером такого сжатия может служить формат GIF для статической графики и GIF89a для видео.

2. Сжатие с потерями качества

Потери качества могут наблюдаться в случае, если в процессе сжатия информация была утеряна. Однако с точки зрения человеческого восприятия сжатием с потерями следует считать лишь то сжатие, при котором на глаз можно отличить результат сжатия от оригинала. Таким образом, несмотря на то, что два изображения – оригинал и результат сжатия с использованием того или иного компрессора — побитно могут не совпадать, разница между ними будет совсем незаметной. Примерами здесь могут служить алгоритмы JPEG для сжатия статической графики и алгоритм M-JPEG для сжатия видео.

2.1. Сжатие без потерь с точки зрения восприятия

Данные после декомпрессии побитно не совпадают с исходными. Будучи сжатием с потерями качества, формально подобная схема сжатия с точки зрения восприятия ее человеком может считаться схемой без потерь. Большинство технологий сжатия с формальной потерей качества имеют так называемый фактор качества сжатия (ФКС), характеризующий именно качество восприятия и варьирующийся в пределах от 0 до 100. При факторе качества сжатия, равном 100, характеристики восприятия качества декомпрессированного видео по восприятию почти неотличимы от оригинала.

2.2. Сжатие с естественной потерей качества

JPEG, MPEG и другие технологии сжатия с потерей качества иногда сжимают, переступая за грань сжатия без потерь с точки зрения восприятия видеоинформации. Тем не менее сжатые видео- и статические изображения вполне приемлемы для адекватного восприятия их человеком.

Иными словами, в данном случае наблюдается так называемая естественная деградация изображения, при которой теряются некоторые мелкие детали сцены.  Похожее может происходить и в естественных условиях, например при дожде или тумане. Изображение в таких условиях, как правило, различимо, однако уменьшается его детализация.

2.3. Сжатие с неестественными потерями качества

Низкое качество сжатия, в значительной степени искажающее изображение и вносящее в него искусственные (не существующие в оригинале) детали сцены, называется неестественным сжатием с потерей качества. Примером тому может служить некоторая «блочность» в сильно сжатом MPEG,е и в других компрессорах, использующих технологию БДКП.

Неестественность заключается в первую очередь в нарушении самых важных с точки зрения восприятия человеком характеристик изображения — контуров. Опыт показывает, что именно контуры позволяют человеку правильно идентифицировать тот или иной визуальный объект.

Отметим также, что все широко используемые видеокомпрессоры используют технологии сжатия с потерями качества. При различных значениях ФКС может дать на выходе качество видео как без потерь с точки зрения восприятия, так и с неестественными потерями.

В начало В начало

Сжатие мультимедиа-данных для их представления в Web

Очевидно, что для представления информации в Web требуется качество без потерь с точки зрения усвоения или в крайнем случае — с естественными потерями качества. Тем не менее до последнего времени практически не существовало алгоритма,  позволяющего передавать видео приемлемого качества в потоковом режиме по сети за реальное время. С этой точки зрения колоссальным прорывом явилось появление таких видеостандартов, как MPEG-4 и DivX. Ну а по части звука — лучше старого и всем известного MP3 пока ничего не придумано.

Итак, давайте детально рассмотрим принципы, лежащие в основе каждого из перечисленных алгоритмов и способов компрессии мультимедийных данных.

В начало В начало

MPEG-4. Что это такое?

Основы разработки стандарта MPEG-4 (http://www.cselt.it/mpeg/standards/mpeg-4/mpeg-4.htm) были заложены группой ученых из MPEG еще в 1993 году, и уже к концу 1998 года произошло утверждение первого стандарта. Впоследствии стандарт неоднократно дорабатывался, в 1999 году получил официальный статус и затем был стандартизован со стороны ISO/IEC.

Целью создания MPEG-4 была выработка стандарта кодирования, который обеспечил бы разработчиков универсальным средством сжатия видеоданных, позволяющим обрабатывать аудио- и видеоданные как естественного (снятого с помощью видеокамеры или записанного с помощью микрофона), так и искусственного (синтезированного или сгенерированного на компьютере) происхождения.  Это обстоятельство кардинальным образом отличает MPEG-4 как видеостандарт от его предшественников MPEG-1 и MPEG-2, в которых эффективное сжатие данных достигается лишь применительно к естественному видео и аудио.

В начало В начало

Принципы работы алгоритма сжатия MPEG-4

MPEG-4 обеспечивает необходимые средства для описания взаимного расположения объектов (элементов) сцены в пространстве и времени с целью их последующего представления потенциальным зрителям в ходе воспроизведения. Разумеется, такая трактовка предполагает разделение сцены на составляющие ее объекты, что само по себе является весьма трудоемкой задачей, к которой по сути и сводится MPEG-4-кодирование. Кроме того, при разработке стандарта MPEG-4 решались проблемы обеспечения воспроизведения объектов сцены в различных условиях пропускной способности сетей передачи данных. Был разработан формат, допускающий «универсальный доступ» к мультимедийной информации с учетом возможных ограничений полосы пропускания, возникающих в сетях при самых разных условиях. Другими словами, один и тот же видеофрагмент может быть представлен с различным качеством для различных каналов в зависимости от их пропускной способности.

Кодирование в формате MPEG-4 раздельное. Это означает, что для кодирования видеосоставляющей применяются одни способы и алгоритмы сжатия, а для кодирования аудиосоставляющей – другие. Естественной издержкой такого специфичного подхода к сжатию является необходимость сопоставления двух потоков в ходе их последующего совместного воспроизведения в режиме реального времени.

В начало В начало

Основы сжатия видеоданных в MPEG-4

В основу функций сжатия видеосоставляющей стандарта MPEG-4 была положена технология применения целого арсенала алгоритмов сжатия, применяемых как в зависимости от исходного качества и природы сжимаемого видеофрагмента, так и в совокупности и (или) последовательно обрабатывающих исходное видео с помощью различных по природе алгоритмов сжатия. Это методы прогрессивного и словарного кодирования, кодирования  с использованием чересстрочного сканирования, технологии RLE (Run Length Encoding), технологии векторной квантизации (Vector Quantization), а также всевозможные преобразования (Фурье, Дискретное Косинусное, Wavelet).

В начало В начало

Основы MPEG-кодирования видео

Первоначальное кодирование видео (имеющего естественную природу, см. выше) в MPEG-4 осуществляется аналогично MPEG-1 и MPEG-2.  В этом смысле основа кодирования у группы алгоритмов MPEG общая. Основные идеи, применяемые в ходе сжатия видеоданных с ее помощью, следующие:

  1. Устранение временной избыточности видео, учитывающее тот факт, что в пределах коротких интервалов времени большинство фрагментов сцены оказываются неподвижными или незначительно смещаются по полю.
  2. Устранение пространственной избыточности изображений путем подавления мелких деталей сцены, несущественных для визуального восприятия человеком.
  3. Использование более низкого цветового разрешения при yuv-предеставлении изображений (y — яркость, u и v — цветоразностные сигналы) — установлено, что глаз менее чувствителен к пространственным изменениям оттенков цвета по сравнению с изменениями яркости.
  4. Повышение информационной плотности результирующего цифрового потока путем выбора оптимального математического кода для его описания (например, использование более коротких кодовых слов для наиболее часто повторяемых значений).

Кроме того, основная идея заключается в разделении кадров на опорные (I — intra), а также так называемые предсказанные (то есть строящиеся на основе опорных) — как однонаправленные (P – predicted), так и двунаправленно предсказываемые (B – bi-directionally predicted) кадры (под направлением здесь следует понимать временную последовательность представления кадров видео).

Однако MPEG-4,  кроме рассмотренного традиционного MPEG-кодирования, основанного на прямоугольных кадрах, использует технологию так называемого фрактального  или контурно-основанного кодирования изображений.

В начало В начало

Основы фрактального кодирования изображений

Для понимания принципов контурно-основанного кодирования изображений, применяющегося в MPEG-4, уясним себе несколько простых идей.

Контур — это линия, очерчивающая границу фигуры на плоскости. Текстура – представление структуры поверхности изображения. Контурно-основанное кодирование изображений представляет изображения как контуры, огибающие текстурные области (области, заполненные текстурами). А так как контуры, как правило, совпадают с границами изображаемых объектов сцены, то задача контурно-основанного кодирования сводится к задаче объектно-основанного кодирования изображений, а именно: изображение представляется набором составляющих его объектов.

После того как контуры и текстуры вычленены из изображения, контуры могут быть представлены как контрольные точки «сплина» (spline) – полиномиальной функции,  используемой для представления кривых, «обтягивающих» тот или иной контур. Текстуры же, в свою очередь, могут быть представлены в качестве коэффициентов какого-либо пространственного преобразования частоты (например, дискретного косинусного или  дискретного wavelet-преобразования). Сжатие же может быть достигнуто путем скалярной или векторной квантизации контрольных параметров «сплин-а» и коэффициентов преобразования, используемых для представления текстуры. Но не будем вдаваться в математические детали, используемые в ходе кодирования видео.

Что и говорить, задача контурно-основанного кодирования в настоящее время является одной из наиболее перспективных и, пожалуй, одной из весьма трудоемких (с точки зрения вычислений).

Говоря простыми словами, MPEG-4 обеспечивает возможность индивидуально кодировать специфические элементы в рамках видеосюжета. Поскольку разные объекты, используемые в видеосюжете, как правило, имеют различную природу (текстурный фон, персонажи переднего плана, мелкие детали сцены), то совокупность различных по природе способов сжатия, используемых для разных типов данных, в зависимости от их природы, позволяет добиться наиболее высокой степени сжатия.

В начало В начало

Индивидуальные объекты

Основным отличием MPEG-4 сжатия от предшествующих алгоритмов сжатия видео MPEG-1 и MPEG-2 является не сжатие последовательности прямоугольных кадров, а использование принципа кодирования индивидуальных объектов произвольной формы. Кодирование формы, или альфа-канала, означает, что произвольная форма в сцене MPEG-4 может отслеживаться посредством двоичной альфа-карты, определяющей принадлежность данного пиксела к объекту. Это особенно полезно для разработчиков интерактивного контента по нескольким причинам. Во-первых, видеоинформация не обязательно должна быть оформлена в виде прямоугольных кадров. Во-вторых, индивидуально закодированные видеоформы можно интегрировать с другими объектами, такими как 2D-, 3D- или естественный видеофон, образуя сцены. Наконец, особый интерес для разработчиков представляет возможность использования отдельных объектов в качестве элементов интерактивного действия. Примерами могут служить простые взаимосвязи в рамках сюжета или смоделированные персонажи, реагирующие на действия пользователя.

Результатом такого объектного подхода стала возможность интеграции естественных и синтетических видеоисточников. Стандарт MPEG-4 содержит средства интеграции для кодирования растровых видеоизображений и средства создания и интеграции синтезированных 2D- и 3D-элементов, включая геометрические формы и объекты, текст и синтезированную графику.

В начало В начало

Что такое DivX?

История возникновения этой аббревиатуры весьма таинственна. Дело в том, что изначально аббревиатурой DivX  назывались обычные DVD-диски с ограниченным количеством возможностей просмотра видеофильма, однако не так давно ее смысл значительно изменился. Итак, речь идет о совершенно иной технологии, для обозначения которой используется аббревиатура DivX.

Как утверждают источники (http://www.news.cnet.com/news/0-1005-200-1591614.html?tag=st), двое хакеров явили миру новый формат сжатия видеофайлов, названный ими DivX. На самом деле DivX является всего лишь взломанной версией Microsoft MPEG-4 Video Codeс (Low-Motion-кодек — это взломаная версия 4.1.00.4920 MPEG4v3, а High-Motion-кодек – 4.1.4917 MPEGv3). Как утверждают авторы, они его слегка доработали и улучшили. В частности, они сделали возможным вывод файлов после компрессии в формате *.avi, в то время как кодек MPEG-4 Video Codec поддерживает формат *.asf и устанавливается вместе с Windows Media Player или Windows Media Tools.

То есть фактически данный алгоритм официально не поддерживается, по крайней мере в таком исполнении, тем не менее DivX базируется на формате MPEG-4.

Прелесть алгоритма DivX заключается в том, что фильм длительностью до трех часов можно сжать до объема, умещающегося на одном CD, что вдвое меньше, чем у MPEG-1,  при этом результатом будет более качественная картинка, особенно в плане разрешения. Появившиеся на рынках диски с записью фильмов в стандарте MPEG-4 — случай подобного использования алгоритма DivX. Их стоимость сегодня составляет от 50 до 100 рублей в зависимости от качества и содержимого. В качестве источника, как правило, используется DVD. Большинство фильмов записано в формате 16:9, дает не лучшую картинку на мониторе, однако качество таких фильмов, как правило, выше, чем фильмов с обычным форматом 4:3. Кроме того, чем меньше продолжительность фильма, тем большую скорость цифрового потока можно использовать, заполняя все пространство диска CD. Разумеется, и качество в этом случае будет выше.

Предположим, к вам какими-то загадочными путями попал DVD-диск с хорошим фильмом. Благодаря технологии DivX вы можете сохранить файл фильма у себя, скажем, на жестком диске, да еще и прилично сжать его по объему, правда с некоторой потерей качества. В дальнейшем полученный сжатый файл можно записать на CD-R, как и любой другой файл, и использовать его в нужное время.

Если же у вас нет желания или возможности заниматься самостоятельной компрессией, то вполне можно использовать готовую продукцию, объемы которой стремительно растут.

Если говорить о недостатках DivX,  то нельзя не отметить отсутствие возможности просмотра полученного фильма на обычном домашнем телевизоре. Правда, ситуация может оказаться разрешимой, если у вас имеется видеокарта с неплохим TVOUTом, однако даже в этом случае изображение будет слегка размытым и далеким от совершенства.

Подробную информацию по DivX можно найти здесь (http://www.divx-digest.com).

В начало В начало

О MPEG Layer 3, и не только

Для эффективного кодирования аудиоданных в Web применяются наиболее прогрессивные методы, в основе которых лежит свойство их универсальности и независимости от качества исходного звукового фрагмента, равно как и результирующего, в зависимости от установок, применяемых в ходе сжатия.

В настоящее время наиболее известны Audio MPEG, PASC и ATRAC. Все они используют так называемое кодирование для восприятия (perceptual coding), при котором из звукового сигнала удаляется информация, малозаметная для слуха. В результате, несмотря на изменение формы и спектра сигнала, его слуховое восприятие практически не меняется, а степень сжатия оправдывает незначительное уменьшение качества. Такое кодирование относится к методам сжатия с потерями, когда из сжатого сигнала уже невозможно точно восстановить исходную волновую форму.

Приемы удаления части информации базируются на особенностях человеческого слуха, называемой маскированием: при наличии в спектре звука выраженных пиков (преобладающих гармоник) более слабые частотные составляющие в непосредственной близости от них на слух практически не воспринимаются (маскируются). При кодировании весь звуковой поток разбивается на мелкие кадры, каждый из которых преобразуется в спектральное представление и делится на ряд частотных полос. Внутри полос происходит определение и удаление маскируемых звуков, после чего каждый кадр подвергается адаптивному кодированию прямо в спектральной форме. Все эти операции позволяют значительно (в несколько раз) уменьшить объем данных при сохранении качества, приемлемого для большинства слушателей.

Каждый из описанных методов кодирования характеризуется скоростью битового потока, с которой сжатая информация должна поступать в декодер при восстановлении звукового сигнала.

Декодер преобразует серию сжатых мгновенных спектров сигнала в обычную цифровую волновую форму.

Audio MPEG — группа методов сжатия звука, стандартизованная MPEG (Moving Pictures Experts Group — экспертной группой по обработке движущихся изображений).

В любом видео- или аудиопотоке содержится значительное количество избыточной информации, которая независимо от ее присутствия или отсутствия не может быть воспринята человеческим ухом или глазом.

Информация в MPEG-файле записана последовательными блоками — кадрами (frames), которые последовательно считываются, а затем декодируются. Естественно, что чем больше поток, тем большее количество информации остается в файле и соответственно тем большее представление об оригинальном звуке в нем содержится.

Аудиоинфоpмация, сжатая по данной схеме, может пеpедаваться потоком (streaming), а может храниться в файлах формата MP3 или WAV-MP3. Отличие второго от первого состоит в наличии дополнительного заголовка WAV-файла, что позволяет при наличии MP3-кодека в системе для работы с таким файлом использовать стандартные средства Windows.

Основная идея, на котоpой основаны все методики сжатия аyдиосигнала с потеpями, — отказ от кодиpования тонких деталей звyчания оpигинала, лежащих вне пpеделов возможностей человеческого слyха.  Звуки, находящиеся на границах резких перепадов уровня: после очень громкого звука на протяжении небольшого отрезка времени около 100 мс и перед ним на протяжении 5 мс, человеческое ухо неспособно воспринимать другие, более тихие звуки.

Говоря об этом, обычно имеют в виду возможности сознательного восприятия, игнорируя часто встречающийся эффект подпорогового восприятия различных мелких, сравнительно тихих деталей; с их помощью, например, нередко обеспечивается эмоциональная окраска композиции. Но если пpи кодиpовании все же огpаничиваться только действительно невоспринимаемыми потерями, то можно говоpить о сохpанении исходного качества закодиpованного аyдио.

Как известно, наиболее важную роль в передаче звукового сигнала играют вершины огибающей, в то время как переходами вблизи нулевой отметки можно пожертвовать (см. рис. 1).

После такой обработки звуковая выборка без труда сжимается с помощью обычных алгоритмов кодирования LZ или Huffman.

Но полученная ширина потока не yдовлетвоpила разработчиков. Ради дальнейшего уменьшения объема потока была разработана подробная психоакyстическая модель возможностей человеческого слуха, и из потока стала исключаться информация о деталях звука, полностью или частично маскируемых более сильным сигналом. В данную категорию из-за низкого уровня автоматически попадает большая часть сознательно не воспринимаемого сигнала (в принципе, на высших потоках происходил аналогичный процесс, но в несравнимо меньшей степени, с сохранением практически всех существенных деталей). Кроме того, для снижения уровня потерь на низких потоках применяются особые виды техники, главный из которых – режим кодирования объединенного стерео (joint stereo). Потери при кодировании в режиме joint stereo на низких потоках (и только на них) оказываются намного ниже, чем при кодировании в режиме нормального стерео, если стеpеоэффект особого значения не имеет; но, к сожалению, оно же приводит к плачевным результатам в часто встречающихся случаях записей с фазовым сдвигом, созданным при записи намеренно или появившимся в процессе эксплуатации записи.

Суть кодирования в соответствии с техникой joint stereo состоит в пpеобpазовании всего стеpеосигнала в средний сигнал между каналами и разность между ними. Но это только один вариант joint stereo, называемый MS Stereo. На особо низких потоках, таких как 96 Кбит/с, применяется техника MS/IS Stereo, в которой для некоторых частотных диапазонов вместо разницы между каналами хранится лишь информация о соотношении мощностей сигнала в разных каналах. Продукция FhG IIS так кодирует только высокие частоты, но некоторые кодеры позволяют выбрать нужный диапазон вручную. К сожалению, выбор заключается в указании нужного значения одной из маловразумительных внутренних переменных формата, не разъясняемой в документации.

Окончательной веpсии вышеyпоминаемой психоакустической модели пока не существует, как нет и опpеделенного стандаpтного алгоpитма кодиpования. В связи с этим в общем слyчае объем и степень ощyтимости потеpь опpеделяются, с одной стоpоны, потоком, а с дpyгой — особенностями конкpетной pазновидности психоакyстической модели, использованной в каждом конкpетном кодеpе. Последний момент имеет особенно большое значение на низких потоках. Существует набоp эффектов, которые на таких потоках крайне плохо поддаются кодиpованию.

И еще одна особенность человеческого слуха  была учтена при разработке алгоритма компрессии — использование минимального порога слышимости. Наибольшей чувствительностью (2-4 дБ) органы слуха обладают в среднем диапазоне частот порядка 2-5 кГц. На других частотах порогом чувствительности может стать значение громкости звука в 40 дБ. Иными словами, звуки, лежащие за порогом чувствительности, нет смысла сохранять, поскольку они все равно не будут услышаны.

На основании подобных эффектов создается так называемая психоакустическая модель, разбивающая весь частотный спектр на части, в которых уровень звука примерно одинаков, после чего удаляет звуки, не воспринимаемые человеком, как это было описано выше.

Существует три уровня  Audio MPEG для сжатия стереофонических сигналов:

Теперь попробуем понять, какова разница между уровнями (Layers). Например, в Layer 3 части разбитого спектра намного меньше, чем в первых двух, и по этой причине сжатие этим методом является наиболее продуктивным, а коэффициент  его достигает 1:12 без заметной на слух потери качества. Поэтому столь широкое распространенное получило расширение файлов MP3 (MPEG Layer 3).

Для получения звука с качеством CD необходимо компрессировать аудиофайлы с потоком 256 Кбит/с, но для большинства слушателей и большинства применений вполне достаточно 128 Кбит/с (по 64 Кбит/с на канал). Однако среди великого множества кодеров MP3-файлов следует отметить немногие, позволяющие сжимать звуковой ряд с переменным потоком (variable bitrate), обеспечивая таким образом максимальное качество и экономя дисковое пространство. Основой таких кодеков является использование в каждый момент времени определенного значения потока и, как следствие, изменяющейся во времени природы звукового сигнала (частоты и амплитуды звуковых колебаний). Для сжатия речи с отличным качеством вполне достаточно 24  или 32 Кбит/с.

Построение той самой психоакустической модели — сложный математический процесс, изобилующий вычислениями с плавающей запятой. Как следствие, подобный процесс, равно как и процесс сжатия методом Хаффмана, требует солидной вычислительной мощности и при декодировании файлов формата MPEG, и особенно — при кодировании. Первоначально для этой цели использовались специализированные устройства, выполнявшие все математические преобразования на аппаратном уровне, и лишь в последние годы, после появления достаточно мощных процессоров, способных справляться с подобными вычислениями без особого ущерба для остальных приложений,  это стало возможным и с помощью специальных программ.

В начало В начало

Постановка задачи

Теперь, когда мы уяснили себе способы представления мультимедиа-данных в Web, попробуем решить конкретную задачу. Предположим, мы хотим реализовать страничку представления видео- и аудиопродукции в Интернете, причем без представления возможности скачивать видеофильмы и аудиофрагменты, а лишь позволяя их прослушивать в режиме on-line.

Для реализации подобной задачи нам потребуется огранизовать хранилище видеофайлов (например, в формате MPEG-4 или DivX) и аудиофрагментов в формате MP3. Под хранилищем будем понимать файловую систему.

Далее необходимо разработать два вспомогательных компонента:

В начало В начало

Что же нам понадобится?

Для реализации первого компонента поставленной задачи мы будем использовать обычные ASP-средства представления файловой системы сервера (той ее части, где хранятся видео- и аудиоданные) в виде HTML. Результатом будет список ссылок на соответствующие файлы с видео или аудио. Поэтому мы будем использовать средства работы с файлами и каталогами ASP, уже знакомые нам из предыдущей статьи настоящего цикла.

Для реализации второго компонента необходимо OLE-встраивание экземпляра объекта Windows Media, необходимого для всех наших потенциальных слушателей, который, собственно, и будет осуществлять буферизацию и потоковое воспроизведение. Однако неясным остается способ передачи параметра, чтобы, во-первых, объект Windows Media встраивался в наш HTML-документ, а во-вторых, осуществлялось именно потоковое воспроизведение ресурса.

Сделать первое очень просто посредством следующего HTML-тэга в компоненте просмотра содержания при формировании ссылки:

<EMBED src="ИМЯ_ФАЙЛА" width=350
                                                       height=43
                                                       controls=console
                                                       volume=80
                                                       loop=false
                                                       type='audio/mp3'>  

а второе — посредством следующего HTML- тэга:

<A HREF="Player.asp?Play=ПОЛНЫЙ_WWW_ПУТЬ_К_РЕСУРСУ
                     #stream "target='PlayerFrame'" TITLE="Прослушать">  

Итак, в первом случае для корректного воспроизведения того или иного мультимедиа-ресурса необходимо прописать его MIME-тип. Приведенный тип 'audio/mp3 соответствует MIME-типу звукового фрагмента формата MP3. Во втором случае указывается файл ASP-страницы, осуществляющий встраивание компонента с его последующим воспроизведением, далее указывается параметр #stream, указывающий на то, что воспроизведение будет осуществляться в режиме потока.

Для определения соответствующего MIME-типа какого бы то ни было другого формата данных (в нашем случае формата AVI) необходимо воспользоваться конфигуратором MIME-программы  Internet Services Manager (см. рис. 2).

Кроме всего прочего нам потребуется создать виртуальный каталог (Virtual Directory) который представляет собой реальный физический каталог на жестком диске нашего гипотетического сервера. Выбираемые нами для прослушивания (просмотра) ресурсы будут храниться именно в этом каталоге.. Для создания Virtual Directory также следует воспользоваться программой  Internet Services Manager, в которой на нужном сайте щелчком правой кнопки мыши необходимо выбрать пункт «New» и доуточнение «Virtual Directory». В результате в появившемся мастере нужно назвать вируальный каталог (Alias) и сопоставить ему тот или иной физический (в нашем случае тот, в котором хранятся аудио- или видеоресурсы).

В начало В начало

Представление данных

Теперь попробуем организовать простейшую систему прослушивания MP3-музыки в on-line. Для удобства представим просмотр содержания (первый компонент) большим горизонтальным фреймом, а прослушивание аудиофрагментов (второй компонент) — маленьким горизонтальным фреймом (см. рис. 3).

В этом случае набор фреймов (файл Index.asp) может быть представлен следующим образом:

<HTML>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">  
<TITLE>ASP Mpeg Layer III OnLine Player</TITLE>  
</head>  
<Frameset rows="*,95">  
 <frame name="MainFrame" src="PlayList.asp">  
 <frame name="PlayerFrame" src="Player.asp">  
</Frameset>  
</HTML>  

Далее необходимо подготовить странички  PlayList.asp и Player.asp для реализации соответственно первого и второго компонента поставленной нами задачи.

В начало В начало

Просмотр содержания аудиофрагментов (файл PlayList.asp)

Теперь нам надлежит сформировать список содержимого указанного виртуального каталога с MP3-музыкой, причем с заходами в подкаталоги, формируя таким образом все дерево подкаталогов указанного каталога. Для простоты понимания в рамках настоящей статьи сделаем это для одного уровня вложенности; дальнейшем это можно будет производить и для неограниченного уровня вложенности.

Для каждого аудиофайла нам надлежит сформировать ссылку на страничку прослушивания (в нижнем фрейме), передав ей в качестве параметра имя аудиофайла и установив режим потокового воспроизведения.

<head>  
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">  
</head>  
<body>  
<table>  
<tr>  
<td>  
<%  
'********************************************************************************************  
 Sub ListFiles (ListObject)   
   Set FileCollection = ListObject.Files  
   For Each File In FileCollection  
     s = LCase(File.Name)  
      If ucase(Right(File.name,4))=".MP3" Then  
           
         With Response  
          .Write("<A href=" & chr(34) & "Player.asp?Play=" & ListObject.Path & "\" & File.name & vbCrLf)  
          .Write("#stream" & chr(34) & "target='PlayerFrame'><font size=""2"" face=""Arial"">" & vbCrLf)  
          .Write("Прослушать</font></a>&nbsp;" & vbCrLf)  
          .Write("(" & File.name & " Размер - " & File.size & ")<BR>" & vbCrLf)  
         End With  
      End If  
   Next  
 End Sub  
'********************************************************************************************  
 Sub ListFolders(ParentFolder)  
   ListFiles(ParentFolder)  
   Set FD = ParentFolder.SubFolders  
   For Each WhatEver in FD  
     Response.Write "<h5>" & WhatEver.name & " - " & WhatEver.datecreated & "</h5>"  
     ListFiles(WhatEver)  
   Next  
 End Sub  
'********************************************************************************************  
 On Error Resume Next  
 Dim FileSystemObject, Folder, FileCollection, File  
 Dim FolderPath, WebDir  
 Response.Write "<h2>Альбомы</h2><blockquote>"  
 Server.ScriptTimeOut = 1  
 FolderPath = server.MapPath("Music")  
 WebDir = Request.ServerVariables("PATH_INFO")  
 Set FileSystemObject = CreateObject("Scripting.FileSystemObject")  
 Set Folder = FileSystemObject.GetFolder(Folderpath)  
 Set FD = Folder.SubFolders  
 For Each WhatEver in FD  
   Response.Write "<h4>" & WhatEver.name & " - " & WhatEver.datecreated & "</h4><blockquote>"  
   ListFolders(WhatEver)  
   Response.Write "</blockquote>"  
 Next  
%>  
</td>  
</tr>  
</table>  
</body>  
</html>  

Как видите, программа начинает работу с восстановления реального физического пути к ресурсам аудио: FolderPath = server.MapPath("Music"), где Music — не что иное, как имя (alias) нашего виртуального каталога.

Далее, с использованием уже известной нам по материалам предыдущей статьи группы функций по работе с файловой системой, осуществляется циклический проход по всем подкаталогам указанного физического пути, где для каждого для генерации списка подкаталогов и файлов указанного каталога вызывается функция ListFolders,  которая, в свою очередь, вызывает функцию ListFiles для генерации списка ссылок на аудиоданные в пределах одного подкаталога.

В начало В начало

Проигрывание видео- и аудиоданных в режиме потока (файл Player.asp)

Ну и наконец, настала очередь второго компонента, осуществляющего проигрывание аудиофайлов:

<head>  
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">  
</head>  
<body>  
<%  
 If Request.QueryString("play") >"" Then  
   With Response  
     .Write("Воспроизведение - " & Request.QueryString("play") & "<br>")  
     .Write("<EMBED src=" & chr(34) & Request.QueryString("play") & chr(34) & vbCrLf)  
     .Write(" width=350 height=43 controls=console volume=80" & vbCrLf)  
     .Write(" width=350 loop=false type='audio/mp3'>" & vbCrLf)  
   End With  
 Else   
   With Response  
     .Write("<EMBED src=" & chr(34) & chr(34) & vbCrLf)  
     .Write(" width=350 height=43 controls=console volume=80" & vbCrLf)  
     .Write(" width=350 loop=false type='audio/mp3'>" & vbCrLf)  
   End With  
 End If  
%>  
</body>  
</html>  

Как видите, компонент попросту формирует HTML-тэг, встраивающий экземпляр объекта Windows Media непосредственно в страницу.

В начало В начало

Заключение

В заключение напомним читателям о поставленной задаче. Как вы наверняка подметили, задача ставилась гораздо более широко, чем была фактически реализована. Дело в том, что рассмотрение процесса создания целостного, интегрирующего в себе аудио- и видеоресурсы информационного сервера со всеми возможностями поиска, предусматривает разработку не файл-основанной, а базооснованной системы навигации, чем, скорее всего, и пойдет речь в одной из следующих статей цикла.

КомпьютерПресс 7'2001